perm filename CDMP11.1[KL,SYS] blob sn#209164 filedate 1976-04-03 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00009 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	MODIFICATION HISTORY
C00003 00003
C00005 00004
C00007 00005
C00009 00006
C00011 00007
C00013 00008
C00015 00009
C00017 ENDMK
CāŠ—;
;;;MODIFICATION HISTORY
;;;
;;; 15 NOV 75  OBTAINED FROM DEC (KLDCP REV 7)
;;; 15 NOV 75  CONVERTED TO PALX FORMAT
;;;

.SBTTL	PDP-11 CORE DUMP, 4-SEPT-75

;CORE IMAGE CONVERTED TO ".A11" FORMAT
;CONSOLE COMMAND: "CD FILE START,END"

$CD:	TTITRM
	NAMEXT 			;SETUP FILE NAME.EXT
	TST R0			;ANY EXT ?
	BNE 1$			;YES

	MOV #"A1,EXTBF		;NO, USE ".A11"
	MOV #"1 ,EXTBF+2

1$:	TTOCTE 			;INPUT DUMP START ADDRESS
	MOV R0,R5

	TTCOCT 			;INPUT DUMP END ADDRESS
	INC R0
	BIC #1,R0
	SUB R5,R0		;COMPUTE DUMP WORD COUNT
	BPL 99$
	JMP $CDERR		;ADDRESSES BACKWARDS
99$:	SR R0,1
	INC R0
	MOV R0,R4

	TTBTRM 			;VERIFY LINE TERMINATOR

	PNTRST 			;RESET OUTPUT POINTERS

	PNTCI
	';

	MOV #6,R1
	MOV #NAMBF,R2
	JSR PC,$CDFID		;INSERT FILE NAME

	PNTCI
	'.

	MOV #3,R1
	MOV #EXTBF,R2
	JSR PC,$CDFID		;INSERT FILE EXTENSION

	TTBACK
	TTICHR
	CMPB #' ,R0
	BEQ 3$
	CMPB #'	,R0
	BEQ 3$

2$:	TST DEVTYP
	BMI $CDACT		;ACT10
	BNE $CDRP		;RP04
	JMP $CDDTA		;DECTAPE

3$:	PNTCI
	"  

4$:	TTICHR
	BCS $CDERR
	CMPB #CR,R0
	BEQ 2$
	PNTCHR
	BR 4$

$CDFID:	MOVB (R2)+,R0
	CMPB #' ,R0
	BEQ 1$
	PNTCHR
	DEC R1
	BNE $CDFID
1$:	RTS PC

$CDRP:	RPFILE 			;FIND AND SETUP FILE
	BCC 1$
	JMP $NONXF
1$:	MOV #DVBUF,CDADR	;SETUP BUFFER STORE ADDRESS
	BR $CDDON

$CDACT:	COMENQ
	MOV #$INBUF,R0
	COMCMD 			;TRANSMIT COMMAND TO ACT10

	CMPB #'A,R0
	BNE $CDERR		;ERROR
	BR $CDDON

$CORDMP:TTPINI 			;INITIALIZE POINTERS
	PNTCI 			;LINE STARTS WITH "E" & "SPACE"
	"E 

	MOV #16.,R3		;SETUP ASCIIZED WORD COUNT
	CMP R3,R4		;THAT MANY WORDS LEFT IN DUMP ?
	BLOS 1$
	MOV R4,R3		;NO, USE REMAINDER
1$:	MOV R3,TEMP		;INIT CHECKSUM

	MOV R3,R0		;OUTPUT WORD COUNT
	BIS #100,R0		;WILL ALWAYS BE 1 THROUGH 16
	PNTCHR
	PCOMMA
	MOV R5,R0		;OUTPUT BLOCK ADDRESS
	ADD R5,TEMP		;CHECKSUM
	SUB R3,R4		;DECREMENT DUMP WORD COUNT
	JSR PC,$CDA11		;ASCIIZE
	PCOMMA

2$:	MOV (R5)+,R0		;OUTPUT DATA WORD
	ADD R0,TEMP		;CHECKSUM
	JSR PC,$CDA11		;ASCIIZE
	PCOMMA

	DEC R3			;DONE THIS BLOCKS DATA WORDS ?
	BNE 2$			;NOT YET

	MOV TEMP,R0		;OUTPUT NEGATED CHECKSUM
	NEG R0
	JSR PC,$CDA11		;ASCIIZE

$CDDON:	PNTCI 			;FINISH LINE WITH CR
	CR

	TST DEVTYP
	BMI $CDAC1		;ACT10
	JMP $CDDEV		;DEVICE

$CDAC1:	MOV #3,R1		;RETRY 3 TIMES
	INC MSGNBR		;COUNT MESSAGE
$CDXFR:	MOV #$OUTBF,R0
	MOV R0,$OUTPT

	COMCMD 			;TRANSMIT DATA BLOCK

	CMPB #'A,R0		;ACKNOWLEDGED ?
	BNE $CDTRY		;ERROR, RETRY

$CDCON:	TST R4			;DUMP COUNT POSITIVE = WORDS LEFT
	BMI 1$			;DUMP COUNT NEGATIVE = ALL DONE
	BNE $CORDMP		;DUMP COUNT ZERO = DO "EOF" BLOCK

	COM R4			;TRANSMIT "END OF FILE" BLOCK
	PNTCI 			;EOF BLOCK = "E ,,"
	"E  			;WORD COUNT = 0
	PNTCI 			;START ADDRESS = 0
	",, 			; "NON-STARTABLE" ON LOAD
	BR $CDDON

1$:	TST DEVTYP
	BMI 2$
	JMP $CDDVD		;DEVICE

2$:	COMEOT 			;ALL DONE, FINISH FILE WITH EOT
	JMP $CONSL		;WHEW, BACK TO CONSOLE

$CDTRY:	DEC R1			;RETRY ?
	BNE $CDXFR		;YES, RESEND MESSAGE

$CDERR:	PMSG <?CORDMP ERR>
	JMP $CNTLC

$CDA11:	TST R0			;THIS WORD ALL ZEROS ?
	BEQ 3$			;YES, DON'T OUTPUT
	CLR R1
	MOV R0,R2		;SETUP HI-ORDER OIT
	SWAB R0
	BIC #177400,R0
	SHIFTR
	4
	TST R0			;OIT ZERO ?
	BEQ 1$			;YES, SUPPRESS

	JSR PC,$CDP11		;ASCIIZE AND PUT IN BUFFER

	COM R1
1$:	MOV R2,R0		;SETUP MIDDLE OIT
	SHIFTR
	6
	BIC #177700,R0
	TST R1			;HI-ORDER OIT NON-ZERO ?
	BNE 11$			;YES
	TST R0			;ZERO, MIDDLE OIT ZERO ALSO ?
	BEQ 2$			;YES, SUPPRESS

11$:	JSR PC,$CDP11		;ASCIIZE AND PUT IN BUFFER

2$:	MOV R2,R0		;SETUP LOW-ORDER OIT
	BIC #177700,R0
	JSR PC,$CDP11		;ASCIIZE AND PUT IN BUFFER

3$:	RTS PC

$CDP11:	CMP R0,#74		;LEAVE 75, 76, 77 ALONE
	BGT 1$
	BIS #100,R0		;SET BIT 7 FOR ASCIIZE

1$:	PNTCHR 			;PUT IN BUFFER
	RTS PC

;CORE DUMP TO DEVICE ROUTINES

$CDDEV:
$CDRP1:	MOV $OUTPT,R0
	MOVB #LF,(R0)+		;FINISH LINE WITH LF
	CLRB (R0)

	MOV CDADR,R0		;SETUP BUFFER STORE ADDRESS
	MOV #$OUTBF,R1		;SETUP PICKUP POINTER
	MOV R1,$OUTPT

$CDDT2=.
1$:	CMP #DVBUF+<256.*2>,R0
	BEQ 2$			;FILLED THIS DATA BLOCK

	MOVB (R1)+,(R0)+	;PUT DATA IN DEVICE BUFFER
	BNE 1$			;NULL, END OF LINE

	MOV R0,CDADR		;RESAVE BUFFER POINTER
	JMP $CDCON		;CONTINUE CORE DUMP

2$:	PUSH <R0,R1>
	TST DEVTYP
	BEQ $CDDT1		;DECTAPE
	MOV #256.,BUFSIZ
	MOV #FILDSB,R0
	RPWRFL 			;WRITE FILE DATA BLOCK
	BCS $CDDVR		;ERROR

	POP <R1,R0>
	MOV #DVBUF,R0
	MOV R0,CDADR
	BR 1$

$CDDTA:	TST FLOPPY
	BEQ 10$
	RXFILE 			;FIND AND SETUP FLOPPY FILE
	BR 11$
10$:	DTAFILE 		;FIND AND SETUP DECTAPE FILE
11$:	BCC 1$
	JMP $NONXF

1$:	JSR PC,$$CDTA		;SETUP FIRST BLOCK
	JMP $CDDON

$$CDTA:	TST FLOPPY
	BEQ 10$
	RXRDFL 			;READ FLOPPY BLOCK
	BR 11$
10$:	DTRDFL 			;READ DECTAPE BLOCK
11$:	 BCS 2$			;EOF

	MOV #DVBUF+2,R0		;CLEAR DATA PART OF BUFFER
1$:	CLR (R0)+
	CMP #DVBUF+<256.*2>,R0
	BNE 1$

	MOV #DVBUF+2,CDADR
	RTS PC

2$:	PMSG <?INSUFFICIENT ROOM>
	JMP $CNTLC

$CDDT1:	TST FLOPPY
	BEQ 10$
	RXWTFL 			;WRITE DATA BLOCK BACK TO FLOPPY
	BR 11$
10$:	DTWTFL 			;WRITE DATA BLOCK BACK TO DECTAPE
11$:	 BCS $CDDTR		;ERROR

	JSR PC,$$CDTA		;READ & SETUP NEXT

	POP <R1,R0>
	MOV CDADR,R0		;BUFFER ADDRESS TO R0
	BR $CDDT2

$CDDTD:	CLR DVBUF		;CLEAR LINK, THIS BLOCK EOF

	TST FLOPPY
	BEQ 10$
	RXWTFL 			;WRITE LAST FLOPPY BLOCK
	BR 11$
10$:	DTWTFL 			;WRITE LAST DECTAPE BLOCK
11$:	 BCS $CDDTR		;ERROR

	JMP $CONSL		;ALL DONE

$CDDTR:	PMSG <?WRITE ERROR>
	JMP $CNTLC

;DEVICE FINISH CORE DUMP

$CDDVD:	BNE $CDRP2
	BR $CDDTD

$CDRP2:	MOV CDADR,R0
1$:	CLRB (R0)+
	CMP #DVBUF+<256.*2>,R0
	BNE 1$

2$:	MOV CDADR,R0		;COMPUTE WORD COUNT
	SUB #DVBUF,R0
	INC R0
	BIC #1,R0
	SR R0,1
	MOV R0,BUFSIZ		;SET AS BUFFER SIZE
	COM RPEOF		;WRITE END-OF-FILE

	MOV #FILDSB,R0
	RPWRFL 			;WRITE LAST FILE DATA BLOCK
	BCS $CDDVR		;ERROR

	JMP $CONSL		;WHEW !, ALL DONE

$CDDVR:	RPERROR